// 云函数入口文件
const cloud = require('wx-server-sdk')
const tencentcloud = require("tencentcloud-sdk-nodejs")

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
}) // 使用当前云环境

// 导入对应产品模块的client models。
const smsClient = tencentcloud.sms.v20190711.Client
/* 实例化要请求产品(以sms为例)的client对象 */
const client = new smsClient({
  credential: {
    secretId: 'AKIDwMl262wd5ShspbEjEd0GOL7iBSt9C7sX',
    secretKey: 'b2ISQBnJhz9GNPL7B4jEct471hJpBNMH',
  },
  region: "ap-guangzhou", //* 必填：地域信息，可以直接填写字符串ap-guangzhou，或者引用预设的常量 */
})

const templates = {
  custom_msg: "1861285", // 截至{1}，您有{2}条客户消息，请及时回复。跳转小程序：https://tcbe.cn/KYyBzqpW
  refound_apply: "1861274", // 您在{1}有{2}笔{3}退款申请，请及时处理。跳转小程序：https://tcbe.cn/KYyBzqpW
  new_order: "1861261" // 您在{1}有{2}笔新的订单，请及时处理。跳转小程序：https://tcbe.cn/KYyBzqpW
}

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()

  return await sendSms(event)
}

function sendSms(event) {
  const {
    templateName,
    templateParamList,
    phoneNumberList,
    sessionContext
  } = event
  const params = {
    SmsSdkAppid: "1400838270", //* 短信应用ID: 短信SdkAppid在 [短信控制台] 添加应用后生成的实际SdkAppid，示例如1400006666 */
    Sign: "万家顺送水小程序", //* 短信签名内容: 使用 UTF-8 编码，必须填写已审核通过的签名，签名信息可登录 [短信控制台] 查看 */
    // ExtendCode: "",//* 短信码号扩展号: 默认未开通，如需开通请联系 [sms helper] */
    // SenderId: "",//* 国际/港澳台短信 senderid: 中国大陆地区短信填空，默认未开通，如需开通请联系 [sms helper] */
    SessionContext: sessionContext || '', // "", //* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息，server 会原样返回 */
    PhoneNumberSet: phoneNumberList, // ["+8613711112222"], //* 下发手机号码，采用 e.164 标准，+[国家或地区码][手机号], * 示例如：+8613711112222， 其中前面有一个+号 ，86为国家码，13711112222为手机号，最多不要超过200个手机号*/
    TemplateID: templates[templateName], // "449739", //* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
    TemplateParamSet: templateParamList, // ["666"], //* 模板参数: 若无模板参数，则设置为空*/
  }
  // 通过client对象调用想要访问的接口，需要传入请求对象以及响应回调函数
  return new Promise((resolve, reject) => {
    client.SendSms(params, function (err, response) {
      if (err) { // 请求异常返回，打印异常信息
        reject(err)
        return
      }
      resolve(response) // 请求正常返回，打印response对象
    })
  })
}